package com.continautos.common.web;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.continautos.common.enums.EEstadoCola;
import com.continautos.common.persistence.DAOFactory;
import com.continautos.common.persistence.dto.CtaTbCliente;
import com.continautos.common.persistence.dto.CtaTbClientePk;
import com.continautos.common.persistence.dto.CtaTbColaCliente;
import com.continautos.common.persistence.exceptions.CtaTbClienteDaoException;
import com.continautos.common.persistence.exceptions.CtaTbColaClienteDaoException;

/**
 * Servlet implementation class ContactenosServlet
 */
public class CargarDatosServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	
	SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 

	
	
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CargarDatosServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
        
        //HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
        //HttpSession session = (HttpSession) request.getSession(true);
		
		//UserSessionBean userSessionBean = (UserSessionBean)session.getAttribute("userSessionBean");
		
        
		Object objetoXML = request.getParameter("formEcosistec");	
		//Object test = request.getAttribute("datalink");
		
		CtaTbCliente cliente = new CtaTbCliente();
		
		
		if(objetoXML != null){
			
			String respuesta = objetoXML.toString();
			
			respuesta=respuesta.replaceAll("&#0;", "");
			
			int index = respuesta.indexOf("datalink=");
			int indexFin = respuesta.indexOf(" ", index);
			
			String codeIngresoCliente = respuesta.substring(index+10, indexFin-1);
			//datalink="22"
			
			//Carga Numero de documento
			String s1=obtenerValor(respuesta,"<for:numeroDocumento>");
			int numeroDocumento = s1==""?0: Integer.parseInt(s1) ;
			
			//Carga tipoDocumento de documento
			String tipoDocumento=obtenerValor(respuesta,"<for:tipoDocumento>");
			
			//Carga primerApellido de documento
			String primerApellido=obtenerValor(respuesta,"<for:primerApellido>");
			
			//Carga segundoApellido de documento
			String segundoApellido=obtenerValor(respuesta,"<for:segundoApellido>");
			
			//Carga primerNombre de documento
			String primerNombre=obtenerValor(respuesta,"<for:primerNombre>");
			
			//Carga segundoNombre de documento
			String segundoNombre=obtenerValor(respuesta,"<for:segundoNombre>");
			
			//Carga fechaNacimiento de documento
			String fechaNacimiento=obtenerValor(respuesta,"<for:fechaNacimiento>");
			String s;
			Date dateNacimiento=null;
			try {
				s = formatter.format(formatter.parse(fechaNacimiento));
				dateNacimiento = (Date)formatter.parseObject(s);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//Carga genero de documento
			String genero=obtenerValor(respuesta,"<for:genero>");
			
			
			cliente.setNumDoc(s1);
			cliente.setTipoDoc(tipoDocumento);
			cliente.setApellido1(primerApellido);
			cliente.setApellido2(segundoApellido);
			cliente.setNombre1(primerNombre);
			cliente.setNombre2(segundoNombre);
			
			if(dateNacimiento!=null)
			  cliente.setFechaNac( dateNacimiento );
			
			cliente.setGenero(genero);
			cliente.setFecha(new Date());
			
			try {
				CtaTbClientePk pk = DAOFactory.getCtaTbClienteDao().insert(cliente);
				
				cliente.setId(pk.getId());
				
				CtaTbColaCliente cola = new CtaTbColaCliente();
				
				cola.setEstado(EEstadoCola.ESPERA.getValue());
				cola.setFechaEspera(new Date());
				cola.setIdCliente(pk.getId());
				
				//int id = userSessionBean.getIngresoClienteActual().getId();
				//if(id!=0){
					cola.setIdIngreso(Integer.parseInt(codeIngresoCliente));
				//}
				
				DAOFactory.getCtaTbColaClienteDao().insert(cola);
				
				//userSessionBean.setClienteActual(cliente);
				
				//userSessionBean.setMensajeNotificacion("Se ha creado con exito el cliente");
				
				response.sendRedirect("/CONTINAUTOS/portalWeb/paginaNotificacionCreacion.jsf?codigoTurno="+cola.getId()+"&nombre="+cliente.getNombre1()+"&apellido="+cliente.getApellido1());
				
				//facesContext.getExternalContext()
				//			.redirect("/CONTINAUTOS/portalWeb/paginaNotificacionCreacion.jsf");
				
			} catch (CtaTbClienteDaoException e) {
				e.printStackTrace();
				//userSessionBean.setMensajeNotificacion("Se ha producido un error (contacte al administrador del sistema)");
			} catch (CtaTbColaClienteDaoException e) {
				e.printStackTrace();
				//userSessionBean.setMensajeNotificacion("Se ha producido un error (contacte al administrador del sistema)");
			}
			
			
		}
		
	}	
	
	private String obtenerValor(String respuesta,String key){
		
		String valor="";
		int size = key.length();
		String tagCierre = "</"+key.substring(1);
		
		int indexStart = respuesta.indexOf(key);
		int indexEnd = respuesta.indexOf(tagCierre);
		
		if(indexStart!= -1 && indexEnd != -1){
			valor = respuesta.substring(indexStart+size,indexEnd);
		}
		
		return valor;
	}

}
